/*******************************************************************************
* Copyright (C) 2019 Microchip Technology Inc. and its subsidiaries.
*
* Subject to your compliance with these terms, you may use Microchip software
* and any derivatives exclusively with Microchip products. It is your
* responsibility to comply with third party license terms applicable to your
* use of third party software (including open source software) that may
* accompany Microchip software.
*
* THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
* EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY IMPLIED
* WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS FOR A
* PARTICULAR PURPOSE.
*
* IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
* INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
* WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS
* BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE
* FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN
* ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY,
* THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE.
*******************************************************************************/

/*******************************************************************************
  Main Source File

  Company:
    Microchip Technology Inc.

  File Name:
    main.c

  Summary:
    This file contains the "main" function for a project.

  Description:
    This file contains the "main" function for a project.  The
    "main" function calls the "SYS_Initialize" function to initialize the state
    machines of all modules in the system
 *******************************************************************************/

// *****************************************************************************
// *****************************************************************************
// Section: Included Files
// *****************************************************************************
// *****************************************************************************

#include <stddef.h>                     // Defines NULL
#include <stdbool.h>                    // Defines true
#include <stdlib.h>                     // Defines EXIT_FAILURE
#include "definitions.h"                // SYS function prototypes

#define LED_ON                  LED_Clear
#define LED_OFF                 LED_Set
#define LED_TOGGLE              LED_Toggle

#define CRC_DATA_LENGTH         2048
#define CRC_SEED                0xFFFFFFFF

/* Random generated data */
const uint8_t crc_data[CRC_DATA_LENGTH] = 
{
0xf0, 0x7f, 0x00, 0x20, 0x19, 0x0c, 0x00, 0x00, 0x39, 0x0e, 0x00, 0x00, 0x3b, 0x0e, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x0e, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x0e, 0x00, 0x00, 0xa9, 0x0d, 0x00, 0x00, 
0x37, 0x0e, 0x00, 0x00, 0x37, 0x0e, 0x00, 0x00, 0x37, 0x0e, 0x00, 0x00, 0x37, 0x0e, 0x00, 0x00, 
0x37, 0x0e, 0x00, 0x00, 0x37, 0x0e, 0x00, 0x00, 0x37, 0x0e, 0x00, 0x00, 0x37, 0x0e, 0x00, 0x00, 
0x37, 0x0e, 0x00, 0x00, 0x37, 0x0e, 0x00, 0x00, 0x37, 0x0e, 0x00, 0x00, 0x37, 0x0e, 0x00, 0x00, 
0x37, 0x0e, 0x00, 0x00, 0x37, 0x0e, 0x00, 0x00, 0x37, 0x0e, 0x00, 0x00, 0x37, 0x0e, 0x00, 0x00, 
0x37, 0x0e, 0x00, 0x00, 0x37, 0x0e, 0x00, 0x00, 0x37, 0x0e, 0x00, 0x00, 0x37, 0x0e, 0x00, 0x00, 
0x37, 0x0e, 0x00, 0x00, 0x37, 0x0e, 0x00, 0x00, 0x37, 0x0e, 0x00, 0x00, 0x37, 0x0e, 0x00, 0x00, 
0x37, 0x0e, 0x00, 0x00, 0x37, 0x0e, 0x00, 0x00, 0x37, 0x0e, 0x00, 0x00, 0x37, 0x0e, 0x00, 0x00, 
0x37, 0x0e, 0x00, 0x00, 0x37, 0x0e, 0x00, 0x00, 0x37, 0x0e, 0x00, 0x00, 0xf8, 0xb5, 0xc0, 0x46, 
0xf8, 0xbc, 0x08, 0xbc, 0x9e, 0x46, 0x70, 0x47, 0xdd, 0x0d, 0x00, 0x00, 0xe1, 0x0b, 0x00, 0x00, 
0xf8, 0xb5, 0xc0, 0x46, 0xf8, 0xbc, 0x08, 0xbc, 0x9e, 0x46, 0x70, 0x47, 0xb9, 0x0b, 0x00, 0x00, 
0x48, 0x04, 0x00, 0x20, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x20, 
0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x28, 0x04, 0x00, 0x00, 
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x20, 0x74, 0x03, 0x00, 0x20, 
0xdc, 0x03, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x0e, 0x33, 0xcd, 0xab, 0x34, 0x12, 0x6d, 0xe6, 0xec, 0xde, 0x05, 0x00, 
0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 
0x00, 0x22, 0x43, 0x08, 0x8b, 0x42, 0x74, 0xd3, 0x03, 0x09, 0x8b, 0x42, 0x5f, 0xd3, 0x03, 0x0a, 
0x8b, 0x42, 0x44, 0xd3, 0x03, 0x0b, 0x8b, 0x42, 0x28, 0xd3, 0x03, 0x0c, 0x8b, 0x42, 0x0d, 0xd3, 
0xff, 0x22, 0x09, 0x02, 0x12, 0xba, 0x03, 0x0c, 0x8b, 0x42, 0x02, 0xd3, 0x12, 0x12, 0x09, 0x02, 
0x65, 0xd0, 0x03, 0x0b, 0x8b, 0x42, 0x19, 0xd3, 0x00, 0xe0, 0x09, 0x0a, 0xc3, 0x0b, 0x8b, 0x42, 
0x01, 0xd3, 0xcb, 0x03, 0xc0, 0x1a, 0x52, 0x41, 0x83, 0x0b, 0x8b, 0x42, 0x01, 0xd3, 0x8b, 0x03, 
0xc0, 0x1a, 0x52, 0x41, 0x43, 0x0b, 0x8b, 0x42, 0x01, 0xd3, 0x4b, 0x03, 0xc0, 0x1a, 0x52, 0x41, 
0x03, 0x0b, 0x8b, 0x42, 0x01, 0xd3, 0x0b, 0x03, 0xc0, 0x1a, 0x52, 0x41, 0xc3, 0x0a, 0x8b, 0x42, 
0x01, 0xd3, 0xcb, 0x02, 0xc0, 0x1a, 0x52, 0x41, 0x83, 0x0a, 0x8b, 0x42, 0x01, 0xd3, 0x8b, 0x02, 
0xc0, 0x1a, 0x52, 0x41, 0x43, 0x0a, 0x8b, 0x42, 0x01, 0xd3, 0x4b, 0x02, 0xc0, 0x1a, 0x52, 0x41, 
0x03, 0x0a, 0x8b, 0x42, 0x01, 0xd3, 0x0b, 0x02, 0xc0, 0x1a, 0x52, 0x41, 0xcd, 0xd2, 0xc3, 0x09, 
0x8b, 0x42, 0x01, 0xd3, 0xcb, 0x01, 0xc0, 0x1a, 0x52, 0x41, 0x83, 0x09, 0x8b, 0x42, 0x01, 0xd3, 
0x8b, 0x01, 0xc0, 0x1a, 0x52, 0x41, 0x43, 0x09, 0x8b, 0x42, 0x01, 0xd3, 0x4b, 0x01, 0xc0, 0x1a, 
0x52, 0x41, 0x03, 0x09, 0x8b, 0x42, 0x01, 0xd3, 0x0b, 0x01, 0xc0, 0x1a, 0x52, 0x41, 0xc3, 0x08, 
0x8b, 0x42, 0x01, 0xd3, 0xcb, 0x00, 0xc0, 0x1a, 0x52, 0x41, 0x83, 0x08, 0x8b, 0x42, 0x01, 0xd3, 
0x8b, 0x00, 0xc0, 0x1a, 0x52, 0x41, 0x43, 0x08, 0x8b, 0x42, 0x01, 0xd3, 0x4b, 0x00, 0xc0, 0x1a, 
0x52, 0x41, 0x41, 0x1a, 0x00, 0xd2, 0x01, 0x46, 0x52, 0x41, 0x10, 0x46, 0x70, 0x47, 0xff, 0xe7, 
0x01, 0xb5, 0x00, 0x20, 0x00, 0xf0, 0xf2, 0xf9, 0x02, 0xbd, 0xc0, 0x46, 0x00, 0x29, 0xf7, 0xd0, 
0x76, 0xe7, 0x70, 0x47, 0xf8, 0xb5, 0xde, 0x46, 0x9b, 0x46, 0x31, 0x4b, 0x45, 0x46, 0x1c, 0x68, 
0xa4, 0x23, 0x4e, 0x46, 0x57, 0x46, 0x5b, 0x00, 0xe0, 0xb5, 0x05, 0x00, 0xe0, 0x58, 0x0e, 0x00, 
0x90, 0x46, 0x00, 0x28, 0x4b, 0xd0, 0x43, 0x68, 0x1f, 0x2b, 0x0d, 0xdc, 0x5c, 0x1c, 0x00, 0x2d, 
0x21, 0xd1, 0x02, 0x33, 0x9b, 0x00, 0x44, 0x60, 0x1e, 0x50, 0x00, 0x20, 0x3c, 0xbc, 0x90, 0x46, 
0x99, 0x46, 0xa2, 0x46, 0xab, 0x46, 0xf8, 0xbd, 0x22, 0x4b, 0x00, 0x2b, 0x3c, 0xd0, 0xc8, 0x20, 
0x40, 0x00, 0x00, 0xe0, 0x00, 0xbf, 0x00, 0x28, 0x36, 0xd0, 0xa4, 0x22, 0x00, 0x23, 0x52, 0x00, 
0xa1, 0x58, 0x43, 0x60, 0x01, 0x60, 0xa0, 0x50, 0x40, 0x32, 0x83, 0x50, 0x04, 0x32, 0x83, 0x50, 
0x01, 0x24, 0x00, 0x2d, 0xdd, 0xd0, 0x9a, 0x00, 0x91, 0x46, 0x81, 0x44, 0x42, 0x46, 0x88, 0x21, 
0x4f, 0x46, 0x7a, 0x50, 0xc4, 0x22, 0x52, 0x00, 0x90, 0x46, 0x80, 0x44, 0x42, 0x46, 0x87, 0x39, 
0x99, 0x40, 0x12, 0x68, 0x8a, 0x46, 0x0a, 0x43, 0x94, 0x46, 0x42, 0x46, 0x61, 0x46, 0x11, 0x60, 
0x84, 0x22, 0x49, 0x46, 0x5f, 0x46, 0x52, 0x00, 0x8f, 0x50, 0x02, 0x2d, 0xc1, 0xd1, 0x02, 0x00, 
0x55, 0x46, 0x8d, 0x32, 0xff, 0x32, 0x11, 0x68, 0x0d, 0x43, 0x15, 0x60, 0xb9, 0xe7, 0x20, 0x00, 
0x4d, 0x30, 0xff, 0x30, 0xe0, 0x50, 0xae, 0xe7, 0x01, 0x20, 0x40, 0x42, 0xb6, 0xe7, 0xc0, 0x46, 
0x30, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x4a, 0x21, 0x4b, 0x70, 0xb5, 0x00, 0x21, 
0x93, 0x42, 0x03, 0xd2, 0x19, 0x70, 0x01, 0x33, 0x93, 0x42, 0xfb, 0xd1, 0x00, 0x25, 0x03, 0x26, 
0x1c, 0x48, 0x03, 0x68, 0x41, 0x68, 0x00, 0x2b, 0x18, 0xd1, 0x00, 0x29, 0x2d, 0xd0, 0x83, 0x68, 
0x0c, 0x30, 0x00, 0x2b, 0x18, 0xd0, 0x00, 0x23, 0x00, 0x22, 0x84, 0x5c, 0x9c, 0x54, 0x01, 0x32, 
0x8a, 0x42, 0xfa, 0xd3, 0x33, 0x00, 0x0b, 0x40, 0x5a, 0x1e, 0x93, 0x41, 0x89, 0x08, 0x59, 0x18, 
0x89, 0x00, 0x40, 0x18, 0x03, 0x68, 0x41, 0x68, 0x00, 0x2b, 0xe6, 0xd0, 0x82, 0x68, 0x0c, 0x30, 
0x00, 0x2a, 0x07, 0xd1, 0x00, 0x29, 0xdc, 0xd0, 0x59, 0x18, 0x1d, 0x70, 0x01, 0x33, 0x8b, 0x42, 
0xfb, 0xd1, 0xd6, 0xe7, 0x00, 0x29, 0xdf, 0xd1, 0x33, 0x00, 0x0b, 0x40, 0x5a, 0x1e, 0x93, 0x41, 
0x89, 0x08, 0x59, 0x18, 0x89, 0x00, 0x40, 0x18, 0xe4, 0xe7, 0x70, 0xbd, 0x1c, 0x00, 0x00, 0x20, 
0x10, 0x00, 0x00, 0x20, 0xe0, 0x04, 0x00, 0x00, 0x10, 0xb5, 0x06, 0x4c, 0x23, 0x78, 0x00, 0x2b, 
0x07, 0xd1, 0x05, 0x4b, 0x00, 0x2b, 0x02, 0xd0, 0x04, 0x48, 0x00, 0xe0, 0x00, 0xbf, 0x01, 0x23, 
0x23, 0x70, 0x10, 0xbd, 0x48, 0x04, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x08, 0x4b, 0x10, 0xb5, 0x00, 0x2b, 0x03, 0xd0, 0x07, 0x49, 0x08, 0x48, 0x00, 0xe0, 0x00, 0xbf, 
0x07, 0x48, 0x03, 0x68, 0x00, 0x2b, 0x00, 0xd1, 0x10, 0xbd, 0x06, 0x4b, 0x00, 0x2b, 0xfb, 0xd0,
};

/* Function to Generate CRC by reading the crc_data array */
static uint32_t crc32_generate(uint32_t address)
{
    uint32_t   i, j, value;
    uint32_t   crc_tab[256];
    uint32_t   crc = CRC_SEED;
    uint8_t    data;

    /* Generate the standard CRC Table */
    for (i = 0; i < 256; i++)
    {
        value = i;

        for (j = 0; j < 8; j++)
        {
            if (value & 1)
            {
                value = (value >> 1) ^ 0xEDB88320;
            }
            else
            {
                value >>= 1;
            }
        }
        crc_tab[i] = value;
    }

    for (i = 0; i < CRC_DATA_LENGTH; i++)
    {
        data = *(uint8_t *)(address + i);
        crc = crc_tab[(crc ^ data) & 0xff] ^ (crc >> 8);
    }

    return crc;
}

// *****************************************************************************
// *****************************************************************************
// Section: Main Entry Point
// *****************************************************************************
// *****************************************************************************

int main ( void )
{
    uint32_t soft_crc32 = 0;
    uint32_t hw_crc32   = 0;
    bool     status     = false;

    /* Initialize all modules */
    SYS_Initialize ( NULL );

    PAC_PeripheralProtectSetup (PAC_PERIPHERAL_DSU, PAC_PROTECTION_CLEAR);

    LED_OFF();

    soft_crc32 = crc32_generate((uint32_t)&crc_data);

    status = DSU_CRCCalculate((uint32_t)&crc_data, CRC_DATA_LENGTH, CRC_SEED, &hw_crc32);

    if ((status == true) && (soft_crc32 == hw_crc32))
    {
        LED_ON();
    }

    while ( true )
    {
    }

    /* Execution should not come here during normal operation */

    return ( EXIT_FAILURE );
}


/*******************************************************************************
 End of File
*/

